<?php

namespace Crud;

use Forms\FormUnauthorizedAction;
use Pinenut\Form;
// use Crud\CrudConfig;

/**
* Copied & Modified by ITokarev
* 27.10.2014, 19:52
* 
* Класс, реализующий CRUD модель
* для фильтрации полей в сущностях
* 
*/

abstract class IndexAction extends FormUnauthorizedAction
{
	// Указываем класс конфига для определенной формы
    protected static $_crudConfigClass;
    // тут мы говорим какую вызывать вьюху.
    protected static $defaultViews = ['#crud.index'];


	protected function getFormId()
	{
		return  static::$_crudConfigClass;
	}

	protected function getFormConfig()
	{
		$formConfigClass = static::$_crudConfigClass;
		$formConfig = $formConfigClass::getSearchForm();

		return $formConfig;
	}

	protected function getFormAction() {
		return $this->url('.index');
	}

	protected function onFormProcess()
	{
		// сформировать адрес, по которому перезагрузить список
		$this->response->noRender(true);
		$values = $this->form->getRenderValues();

		$data = [
			'href' => $this->url('.index', $values),
			'ajaxHref' => $this->url('.table', $values),
			'ajaxContainer' => '.tableCRUD',
		];
		$this->response->content = json_encode($data);
	}

	protected function onGetRequest()
	{
		// если просто запрос - фильтруем значения
		$this->form->process($this->request->params(), false, true);
	}

	protected function onEndRun()
	{
		$paramsFromURL = [];
		if($this->request->sortType){
			$paramsFromURL['sortType'] = $this->request->sortType;
		}

		if($this->request->page){
			$paramsFromURL['page'] = $this->request->page;
		}

		if($this->request->sortField){
			$paramsFromURL['sortField'] = $this->request->sortField;
		}

		$this->response->form = $this->form;
		$params = $this->form->getRenderValues();
		$this->response->params = array_merge($params,(array)$paramsFromURL);
	}


	/*function run()
	{
		// Цепляем класс конфига из свойства в виде строки
		// и обращаемся к нему как к классу, вызывая метод get() 
		$formConfigClass = static::$_crudConfigClass;
		$formConfig = $formConfigClass::getSearchForm();
		
		$formConfig['htmlOptions']['action'] = $this->url('.index');
		$form = new Form($this->request->_sessionId, $formConfigClass, $formConfig);

		if ($this->request->_isPost && $this->request->isPartial)
		{
			$form->process($this->request->params(), true);
			// вынести в хелпер
			$this->response->content = $form->render();
			$this->response->noRender(true);
			return;
		} else if ($this->request->_isPost) {
			if ($form->process($this->request->params())) {
				// сформировать адрес, по которому перезагрузить список
				$this->response->noRender(true);
				$values = $form->getRenderValues();

				$data = [
					'href' => $this->url('.index', $values),
					'ajaxHref' => $this->url('.table', $values),
					'ajaxContainer' => '.tableCRUD',
				];
				$this->response->content = json_encode($data);
			}
		} else {
			// если просто запрос - фильтруем значения
			$form->process($this->request->params(), false, true);
		}

		$paramsFromURL = [];
		if($this->request->sortType){
			$paramsFromURL['sortType'] = $this->request->sortType;
		}
		if($this->request->page){
			$paramsFromURL['page'] = $this->request->page;
		}
		if($this->request->sortField){
			$paramsFromURL['sortField'] = $this->request->sortField;
		}
		$this->response->form = $form;
		$params = $form->getRenderValues();
		$this->response->params = array_merge($params,(array)$paramsFromURL);
	}*/
}